package com.tarena.lbs.user.dao.repository.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tarena.lbs.base.protocol.pager.BasePageQuery;
import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.user.dao.mapper.UserGroupMapper;
import com.tarena.lbs.user.dao.repository.UserGroupRepository;
import com.tarena.lbs.user.pojo.param.UserGroupParam;
import com.tarena.lbs.user.pojo.po.UserGroupPO;
import com.tarena.lbs.user.pojo.query.UserGroupQuery;
import com.tarena.lbs.user.pojo.vo.UserGroupVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@Repository
public class UserGroupRepositoryImpl implements UserGroupRepository {
    @Autowired
    private UserGroupMapper userGroupMapper;

    @Override
    public void save(UserGroupPO userGroupPO) {
        userGroupMapper.insert(userGroupPO);
    }

    @Override
    public PageResult<UserGroupVO> selectPageList(UserGroupQuery userGroupQuery) {
        // 1. 构建分页查询
        Page<UserGroupPO> page = new Page<>(userGroupQuery.getPageNo(), userGroupQuery.getPageSize());
        LambdaQueryWrapper<UserGroupPO> wrapper = new LambdaQueryWrapper<>();

        if (StringUtils.isNotBlank(userGroupQuery.getGroupName())) {
            wrapper.like(UserGroupPO::getGroupName, userGroupQuery.getGroupName());
        }

        if (StringUtils.isNotBlank(userGroupQuery.getTagIds())) {
            wrapper.like(UserGroupPO::getTagIds, userGroupQuery.getTagIds());
        }

        if (userGroupQuery.getUserNumber() != null) {
            wrapper.eq(UserGroupPO::getUserNumber, userGroupQuery.getUserNumber());
        }

        // 2. 执行分页查询
        IPage<UserGroupPO> poPage = userGroupMapper.selectPage(page, wrapper);
        log.info("查询结果：{}", poPage);

        // 3. 转换为VO
        List<UserGroupVO> voList = poPage.getRecords().stream()
                .map(this::convertToVO)
                .collect(Collectors.toList());

        // 4. 创建分页结果
        PageResult<UserGroupVO> pageResult = new PageResult<>(
                new BasePageQuery(userGroupQuery.getPageNo(), userGroupQuery.getPageSize())
        );
        pageResult.setObjects(voList);
        pageResult.setTotal(poPage.getTotal());

        return pageResult;
    }

    public UserGroupVO convertToVO(UserGroupPO po) {
        UserGroupVO userGroupVO = new UserGroupVO();
        userGroupVO.setGroupName(po.getGroupName());
        userGroupVO.setUserNumber(po.getUserNumber());
        userGroupVO.setId(po.getId());
        userGroupVO.setTagIds(po.getTagIds());
        userGroupVO.setCreateAt(po.getCreateAt());
        userGroupVO.setBusinessId(po.getBusinessId());
        return userGroupVO;
    }
}